// Test the option to avoid failing if derived type descriptors are not found.
// This is a debug option to allow manually writing derived type fir.embox without
// having to care with providing an ABI compliant derived type descriptor object.
// Missing derived type descriptor pointers are replaced by null pointers.
// RUN: tco --ignore-missing-type-desc -o - %s | FileCheck %s
// RUN: %flang_fc1 -emit-llvm  -mmlir --ignore-missing-type-desc -o - %s | FileCheck %s

!some_freestyle_type = !fir.type<some_not_mangled_type{j:i32}>

func.func private @bar(!fir.box<!some_freestyle_type>)

func.func @test_embox(%addr: !fir.ref<!some_freestyle_type>) {
  %0 = fir.embox %addr : (!fir.ref<!some_freestyle_type>) -> !fir.box<!some_freestyle_type>
  fir.call @bar(%0) : (!fir.box<!some_freestyle_type>) -> ()
  return
}
// CHECK-LABEL: define void @test_embox(
// CHECK-SAME: ptr %[[ADDR:.*]])
// CHECK: insertvalue { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }
// CHECK-SAME: { ptr undef, i64 ptrtoint (ptr getelementptr (%some_not_mangled_type, ptr null, i32 1) to i64),
// CHECK-SAME: i32 20180515, i8 0, i8 42, i8 0, i8 1, ptr null, [1 x i64] undef },
// CHECK-SAME: ptr %[[ADDR]], 0
